/*
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
*/
// 导入数据库操作模块
const db=require('../db/index')
// 导入密码加密的文件
const bcrypt=require('bcryptjs')
// 导入生成token字符串的文件
const JWT=require('jsonwebtoken')
// 导入配置秘钥的配置文件
const config=require('../config')

// 注册新用户处理函数
exports.regUser=(req,res)=>{
    // 获取客户端向服务器提交的用户数据
    const userinfo=req.body
//    对数据进行合法性的校验
// if(!userinfo.username || !userinfo.password){
//   return  res.send({status:1,messge:'用户名和密码不合法'})
// }
// 通过中间件进行验证
// 定义SQL语句，查询用户是否被占用
const sqlStr='select * from ev_users where username=?'
  db.query(sqlStr,userinfo.username,(err,results)=>{
    // 执行SQL语句错误
    if(err) {
        // return res.send({status:1,messge:err.message})
        return res.cc(err)
    }
    // 用户名被占用
    if(results.length>0){
        // return res.send({status:1,message:'用户名被占用，请更换其他用户名'})
        return res.cc('用户名被占用，请更换其他用户名')
    }
    // TODO：用户名可以被使用
    // 调用bcrypt.hashSync()对用户的密码进行加密,返回的是一个加密后的字符串
    userinfo.password=bcrypt.hashSync(userinfo.password,10)
    // 定义插入新用户的SQL语句
    const sql='insert into ev_users set ?'
    db.query(sql,{username:userinfo.username,password:userinfo.password},(err,results)=>{
        if(err){
            // return res.send({status: 1,message:err.message})
            return res.cc(err)
        }
        // 执行SQL语句成功，但是影响行数不为1
        if(results.affectedRows!==1){
            // return res.send({status:1,message:'注册用户失败，请稍后再试'} )
            return res.cc('注册用户失败，请稍后再试')
        }
        // 注册成功
        // res.send({status:0,message:'注册用户成功'})
        res.cc('注册用户成功',0)
    })  

  })
   
}
// 登录的处理函数
exports.login=(req,res)=>{
    // 获取到用户传进来的用户信息
    const userinfo=req.body
//    定义SQL查询语句
   const sql='select* from ev_users where username=?' 
// 执行语句
db.query(sql,userinfo.username,(err,results)=>{
    // 执行语句失败
    if(err) return res.cc(err)
    // 查询数据不等于
    if(results.length!==1) return res.cc('登录失败')
    // 查询到用户的数据信息
    // TODO：判断用户的登录密码和数据库中的是否一样
    const compareResult=bcrypt.compareSync(userinfo.password,results[0].password)
    // 判断是否一样
    if(!compareResult) return res.cc('登录密码错误！')
    // TODO:登录成功，生成token字符串
    // 将数据库中的所有信息生成一个对象，并剔除掉用户的密码和头像信息
    const user={...results[0],password:'',user_pic:''}
    // 生成token字符串
    const tokenStr=JWT.sign(user,config.jwtSecretKey,{expiresIn:config.expiresIn})
    // 响应给客户端
    res.send({
        status:0,
        message:'登录成功',
        // 为了方便客户端使用，在前面加上一个Bearer前缀
        token:'Bearer '+tokenStr
    })
})
}